package com.nyist.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * 1. websocket 基础支持类
 *
 * @ClassName WebsocketConfig
 * @Description
 * @Author xiaoyang
 * @Date 2023/06/07/20:23
 */
// @Configuration
// 在这个地方有个坑
// 1. 如果使用 Configuration 就必须是现在这种写法,
// public class WebsocketConfig extends ServerEndpointConfig.Configurator{
// 继承 ServerEndpointConfig.Configurator
//   1.1 在使用这个配置项的时候, 也需要单独指明, 用的哪个配置项, @ServerEndpoint(value = "/websocketUrl/{userId}/{uniqueKey}", configurator = WebsocketConfig.class)
// 2. 如果使用 Component 就不用 继承 这个类, 使用的时候也不用指明哪个配置项
// 3. 什么原因呢, 可能就是 单例 和 原型 模式的区别, 单例就是要指明清楚, 也只有一个, 原型就是多例, 就不需要你指明哪一个, 我每次进来都会新建一个
// 那么, 根据如上知识点, 用户登录 websocket 就应该是新建一个属于自己的连接渠道, 所以使用 原型模式, 也就是 如下这种形式
@Component
public class WebsocketConfig {

    // 这个bean的注册,用于扫描带有 @ServerEndpoint 的注解成为 websocket
    // 如果你使用外置的tomcat就不需要该配置文件
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
